package br.uniceub.fsw.academicmobile.dao;

import br.uniceub.fsw.academicmobile.vo.AulaVO;
import br.uniceub.fsw.academicmobile.vo.FrequenciaVO;
import br.uniceub.fsw.academicmobile.vo.HistoricoVO;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 * Dao responsável pelas operaçoes de banco associadas ao objeto Frequencia
 * @author Christian
 */
public class FrequenciaDAO {

    private BD bd;
    
    public FrequenciaDAO(){
        bd = new BD();
    }
    
    /**
     * Retorna Frequencia a partir do historico e da aula
     * @param historico vo carregando o id do historico
     * @param aula vo carregando o id da aula
     * @return objeto FrequenciaVO
     */
    public FrequenciaVO getFrequenciaPorHistoricoAula(HistoricoVO historico, AulaVO aula){
        
        String SQL = "SELECT * FROM tb_frequencia WHERE tb_historico_ID_historico = <01> " +
                "AND tb_aula_ID_aula = <02>";
        SQL = SQL.replaceAll("<01>",historico.getIdHistorico().toString());
        SQL = SQL.replaceAll("<02>", aula.getIdAula().toString());
        FrequenciaVO f = new FrequenciaVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){
                f.setIdFrequencia(rs.getInt("ID_frequencia"));
                f.setTbHistoricoIdHistorico(rs.getInt("tb_historico_ID_historico"));
                f.setTbAulaIdAula(rs.getInt("tb_aula_ID_aula"));
                f.setDtMes(rs.getString("DT_mes"));
                f.setTpFrequencia1(rs.getString("TP_frequencia1"));
                f.setTpFrequencia2(rs.getString("TP_frequencia2"));
            }
        } catch(Exception ex){
            System.err.println("FrequenciaDAO.getFrequenciaPorAlunoAula: "+
                    ex.getMessage());
        }
        return f;
    }
    
    /**
     * Altera o objeto frequencia no banco
     * @param frequencia vo carregando os dados da frequencia
     * @return boolean caso haja sucesso
     */
    public boolean alterarFrequencia(FrequenciaVO frequencia){
        String SQL = "UPDATE tb_frequencia SET TP_frequencia1='<01>', TP_frequencia2='<02>'" +
                     " WHERE ID_frequencia=<03>";
        SQL = SQL.replaceAll("<01>", frequencia.getTpFrequencia1());
        SQL = SQL.replaceAll("<02>", frequencia.getTpFrequencia2());
        SQL = SQL.replaceAll("<03>", frequencia.getIdFrequencia().toString());
        return bd.execSQL(SQL);
    }
    
    /**
     * Inclui o objeto frequencia no banco
     * @param frequencia vo carregando os dados da frequencia
     * @return boolean caso haja sucesso
     */
    public boolean incluirFrequencia(FrequenciaVO frequencia){
        String SQL = "INSERT INTO tb_frequencia (tb_historico_ID_historico, tb_aula_ID_aula," +
                " TP_frequencia1,TP_frequencia2) values (<01>,<02>,'<03>','<04>')";
        SQL = SQL.replaceAll("<01>", frequencia.getTbHistoricoIdHistorico().toString());
        SQL = SQL.replaceAll("<02>", frequencia.getTbAulaIdAula().toString());
        SQL = SQL.replaceAll("<03>", frequencia.getTpFrequencia1());
        SQL = SQL.replaceAll("<04>", frequencia.getTpFrequencia2());
        return bd.execSQL(SQL);
    }
    
    /**
     * Exclui o objeto frequencia no banco
     * @param frequencia vo carregando o id da frequencia
     * @return boolean caso haja sucesso
     */
    public boolean excluirFrequencia(FrequenciaVO frequencia){
        String SQL = "DELETE FROM tb_frequencia WHERE ID_frequencia = <01>";
        SQL = SQL.replaceAll("<01>", frequencia.getIdFrequencia().toString());
        return bd.execSQL(SQL);
    }
    
    /**
     * Retorna a frequencia a partir do id do historico e do id da aula
     * @param aVO vo carregando o id da aula
     * @param hVO vo carregando o id do historico
     * @return ArrayList conjunto de frequencias
     * @throws java.lang.Exception
     */
    public ArrayList<FrequenciaVO> getFrequenciaByAula(AulaVO aVO , HistoricoVO hVO)throws Exception{
		
        String SQL="SELECT * FROM tb_frequencia WHERE tb_historico_ID_historico="
                +hVO.getIdHistorico()+" AND tb_aula_ID_aula="+aVO.getIdAula();
		
		ResultSet rs = bd.getResultSet(SQL);
		ArrayList listaFrequencia = new ArrayList();
		while(rs.next()){
			FrequenciaVO fVO = new FrequenciaVO();
                        fVO.setTbAulaIdAula(rs.getInt("tb_aula_ID_aula"));
                        fVO.getAula();
			fVO.setDtMes(rs.getString("DT_mes"));
			fVO.setHistorico(hVO);
			fVO.setIdFrequencia(rs.getInt("ID_frequencia"));
			fVO.setTpFrequencia1(rs.getString("TP_frequencia1"));
			fVO.setTpFrequencia2(rs.getString("TP_frequencia2"));
			listaFrequencia.add(fVO);
		}
		return listaFrequencia;
	}
    
}
